/* 
中间件(middleware)：
    业务流程的中间多个处理环节。
    在代码中将业务流程分为多个步骤封装，达到组装复用的效果。

    请求 ————> 中间件(步骤)1 ————> 中间件(步骤)2 ————> 中间件(步骤)3 ————> 响应

    一个请求到达 express 服务器，连续调用多个中间件，从而对这次请求进行预处理。
    上一个中间件的输出，作为下一个中间件的输入

    语法如下：
    app.get("/", function(req, res, next){
        next();
    });

    第三个参数是 next 的回调函数就是中间件，本质就是一个必须执行的函数。
    而普通的路由函数只有 req 和 res

    next 函数作用：
        实现多个中间件连续调用的关键，它表示把流转关系转交给下一个中间件或路由

        请求 ————> 中间件(步骤)1 ——next()——> 中间件(步骤)2 —next()———> 中间件(步骤)3 ————> 响应

        注意：当前中间件的业务处理完毕后，必须执行 next(); 
              表示把流转关系转交给下一个中间件或路由(next() 函数，是中间件/步骤结束的标识)

    
*/

// 导入 expres 模块
const express = require("express");

// 创建 express 的服务器实例
const app = express();

// 1.定义一个中间件函数( 有 next() )
// 核酸检测的函数
const hs =  function check(req,res,next) {
    console.log("中间件函数:做核酸检测");
    // 标识中间件函数的结束
    next();
    // 代码还能执行，但是不建议在next() 后面 继续写代码 (约定大于规范)
};

// 2.将 hs 注册为全部生效的中间件
app.use(hs);

// 3.挂载路由
app.get("/js", (req,res) => {
    console.log(`js 函数调用`);
    res.send("开始学习js")
});

app.get("/c", (req,res) => {
    console.log(`c 函数调用`);
    res.send("开始学习c")
});

// 指定端口号，并启动服务
app.listen(8080, () => {
  console.log("服务已启动, 127.0.0.1:8080");
});

